package com.example.gulimall.seckill;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;



/*
    1.整合sentinel
        1.导入依赖
        2.下载sentinel的控制台
        3.配置控制台信息
        4.在控制台加入各种各样的流控规则

    2. 导入审计文件
        1.导入依赖【actuator】 配置management.endpoints.web.exposure.include=*

    3. 自定义流控配置

    4.使用Sentinel保护feign远程调用：熔断
    1、 调用方的熔断保护：
        1.开启熔断保护 开启熔断方法：feign.sentinel.enable=true
            降级策略：
            RT(往返时间) 接下来连续几个请求都超过了某个设置的阈值 那么开启时间窗口内的请求保护 返回fallback
            异常比例：占比超过某个阈值
            异常数：
        2.使用fallback指定解决方法，解决熔断方法
    2、提供方的熔断保护：
        不运行自己的业务逻辑，返回默认的错误数据【WebCallbackManager.setUrlBlockHandler】

    5.自定义受保护的资源
        1. 代码("xxxx")为资源名
        try(Entry entry = SphU.entry("xxxxxx")){
            // 业务逻辑
        }catch(){

        }
        2. 基于注解 @SentinelResource(value="资源名",blockHandler="处理方法名",fallback = 类.class)
        注意：blockHandler处理的是原方法被限流、降级、系统保护时调用，fallback会针对所有类型的异常(必须在同一个类中)

 */

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallSeckillApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallSeckillApplication.class, args);
    }

}
